package tool

import (
	"crypto/tls"
	"fmt"
	"lsgfish/server/internal/config"
	"net/smtp"
)

// SendEmailVerification 发送邮箱验证码
func SendEmailVerification(toEmail string, code string, remark string) error {
	email := config.Conf.Email
	// 构建邮件内容
	message := fmt.Sprintf("From: %s <%s>\r\n"+
		"To: %s\r\n"+
		"Subject: %s\r\n"+
		"Content-Type: text/plain; charset=UTF-8\r\n\r\n"+
		"您的验证码是：%v，5分钟后过期，仅用于%s",
		email.Sender, email.IP, toEmail, email.Subject, code, remark)
	// 配置 TLS
	tlsConfig := &tls.Config{
		InsecureSkipVerify: true,
		ServerName:         email.Host,
	}
	// 建立连接
	conn, err := tls.Dial("tcp", fmt.Sprintf("%s:%d", email.Host, email.Port), tlsConfig)
	if err != nil {
		return fmt.Errorf("连接失败: %v", err)
	}
	// 创建 SMTP 客户端
	client, err := smtp.NewClient(conn, email.Host)
	if err != nil {
		return fmt.Errorf("创建SMTP客户端失败: %v", err)
	}
	defer client.Close()
	// 认证
	auth := smtp.PlainAuth("", email.IP, email.Password, email.Host)
	if err = client.Auth(auth); err != nil {
		return fmt.Errorf("认证失败: %v", err)
	}
	// 设置发件人
	if err = client.Mail(email.IP); err != nil {
		return fmt.Errorf("设置发件人失败: %v", err)
	}
	// 设置收件人
	if err = client.Rcpt(toEmail); err != nil {
		return fmt.Errorf("设置收件人失败: %v", err)
	}
	// 发送邮件内容
	w, err := client.Data()
	if err != nil {
		return fmt.Errorf("创建邮件内容写入器失败: %v", err)
	}
	defer w.Close()
	_, err = w.Write([]byte(message))
	if err != nil {
		return fmt.Errorf("写入邮件内容失败: %v", err)
	}
	fmt.Println("邮件发送成功！")
	return nil
}
